// components/register/register.js
const app = getApp();
Component({
  options:{
      multipleSlots: true, //多slot支持
      addGlobalClass: true
  },
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    LoginStatus: false, //登录状态 
    modalNameIn:  '', // 
    UserStatus: 'register',// register 注册 wait 审核中 success 审核成功 fail 审核拒绝
    registerParam:{
      mobile: '',
      verifyCode: '',
      userName: '', //用户名默认为注册手机号
      dealerCode : '',
    },
    roleList:[],//摘出来用户的权限信息
    userAgreement: true,
    accountStatus: 0, //保护数据默认未注册
    accountBar: false,
    accountStatusText:'',
    verifyCodeButtonDisabled: false,
    codeMinute: 60, //验证码获取倒计时60S
    InitThePage: false,
    msgNumber:{},
    showPush: false, //展示导航页面
    remindList:[], // 已存在消息列表。
    // regAuditPass:注册审核通过；
    // giveFreeAuth:赠送免费车商认证；
    // authAuditPass:车商认证审核通过；
    // giveFreeGoldMedal:赠送免费金牌车商；
    // goldMedalAuditPass:金牌车商审核通过；
    scopeRemid:{
      remindId:null,
      remindType:'', 
    },
    userInfo:{},
    newModalName:null, // 应对除注册外的单类型弹窗
    aduitCheck: null
  },

  /**
   * 组件的方法列表
   */
  methods: {
    lifeInit(){
      this.InitUserStatus();
    },
    async InitUserStatus(){
      await app.checkToken();
      let accountStatus = app.accountStatus;
      let accountBar = this.data.accountBar;
      let UserStatus = this.data.UserStatus;
      let accountStatusText = this.data.accountStatusText;
      // 检查注册状态
      switch (accountStatus) {
        case 0: //未注册
          UserStatus = 'register';
          accountBar = true;
          accountStatusText = '您当前尚未注册';
          break;
        case 1: //审核中
          UserStatus = 'wait';
          accountBar = true;
          accountStatusText = '注册申请正在审核';
          this.CheckAndAudit();
          break;
        case 2: //审核通过
          // 需要判断。 // 展示一次。
          // 加载用户消息信息。
          break;
        case 3: //审核未通过
          UserStatus = 'fail';
          accountBar = true;
          accountStatusText = '注册审核被拒绝';
          if(app.globalData.failModal){
            this.showModal();
            app.globalData.failModal = false;
          }
          break;    
        default:
          break;
      }
      this.setData({
        accountStatus: accountStatus,
        accountBar: accountBar,
        UserStatus: UserStatus,
        accountStatusText:accountStatusText,
        userInfo: app.globalData.userInfo,
        remindList: app.globalData.userInfo.remindList || []
        // remindList: [{remindId:1,remindType:'giveFreeAuth'},
        // {remindId:2,remindType:'authAuditPass'},
        // {remindId:3,remindType:'giveFreeGoldMedal'},
        // {remindId:4,remindType:'goldMedalAuditPass'},
        // {remindId:5,remindType:'regAuditPass'}]
      });
      // 验证是否有需要自动弹窗操作。
      this.validNeedRemidMsg(false);
    },
    // 一个循环请求，用来检查审核。
    CheckAndAudit(){
      if(!this.data.aduitCheck){ //5S一次请求检查，对比是否与当前状态是否一致
        let self = this;
        let aduitCheck = setInterval(async () => {
          await app.userLogin();
          console.log('检查状态',app.accountStatus,self.data.accountStatus);
          if(app.accountStatus != self.data.accountStatus){
            self.lifeInit();
            self.triggerEvent('subRegister');
            // 说明是审核结束了。结束之后
            clearInterval(self.data.aduitCheck);
            self.setData({
              'aduitCheck': null
            });
          }
        }, 5000);
        self.setData({
          'aduitCheck': aduitCheck
        })
      }
    },
    validNeedRemidMsg(needReloadUser){
      if(this.data.remindList.length == 0){
        if(needReloadUser){
          // 重载当前register里面的用户信息。
          this.reloadUser();
        }
      }else{
        if(needReloadUser){ //移除掉第一个
          let remindList = this.data.remindList;
          let scopeRemind = this.data.remindList[0];
          // 进行请求，消息确定。
          app.sHttp.userRemindRead(scopeRemind.remindId).then(res =>{
            // 消息已读,在数组中移除消息。
            remindList.splice(0,1);
            if(this.data.remindList.length == 0){
              this.reloadUser();
            }else{
              // 需要弹窗了。取第一个
              let scopeRemind = this.data.remindList[0];
                // 根据不同类型展示弹窗
              this.showNewModal(scopeRemind.remindType);
            }
          },err=>{
              app.error(err.msg);
          })
        }else{
          if(this.data.remindList.length != 0){
            // 需要弹窗了。取第一个
            let scopeRemind = this.data.remindList[0];
            // 根据不同类型展示弹窗
            this.showNewModal(scopeRemind.remindType);
          }
        }
      }
    },
    async reloadUser(){
      await app.userLogin();
      this.lifeInit();
      this.triggerEvent('subRegister');
    },
    // 展开注册通过窗口
    showModal(e) {
      if(this.getTabBar()){
        this.getTabBar().hideTabbar();
      }
      this.setData({
        modalNameIn: 'show'
      })
    },
    hideModal(e) {
      if(this.getTabBar()){
        this.getTabBar().showTabbar();
      }
      this.setData({
        modalNameIn: null,
        newModalName: null
      });
      this.validNeedRemidMsg(false);
    },
    showNewModal(type){
      if(this.getTabBar()){
        this.getTabBar().hideTabbar();
      }
      this.setData({
        newModalName: type
      })
    },
    hideNewModal(){
      if(this.getTabBar()){
        this.getTabBar().showTabbar();
      }
      this.setData({
        newModalName: null,
        modalNameIn:null
      });
      this.validNeedRemidMsg(true);
    },
    // 去做注册审核相关的事情
    toDoAccountOpt(){
      switch (this.data.UserStatus) {
        case 'register':
          this.userRegister();
          // this.reloadUser();
          break;
        case 'wait':
          this.hideModal();
          break;
        case 'success':
          this.hideModal();
          break;
        case 'fail':
          // this.hideModal();
          this.setData({
            UserStatus: 'register'
          })
          break;
        default:
          break;
      }
    },
    // 用户注册。
    userRegister(){
      // 校验手机号，验证码是否已经填写。
      if(this.validatemobile(this.data.registerParam.mobile)){
        // 手机号正确。验证验证码长度。
        if(this.data.registerParam.verifyCode.length != 6){
          app.alert("验证码为6位数字");
          return
        }else{
          // 填充用户名。
          let registerParam = this.data.registerParam;
          // if(registerParam.userName == ''){
          //   app.alert("请输入您的姓名");
          //   return
          // }
          // registerParam.userName = registerParam.mobile;
          registerParam.dealerCode.length == 0? delete registerParam.dealerCode :'';
          if(app.globalData.shareUserId != undefined && app.globalData.shareUserId != 'undefined' && app.globalData.shareUserId != null && app.globalData.shareUserId != 'null' && app.globalData.shareUserId != ''){ 
            registerParam.shareUserId = app.globalData.shareUserId;
          }
          app.sHttp.userRegApply(registerParam).then(res =>{
            app.success("提交申请成功");
            this.reloadUser();
          },err=>{
            app.error(err.msg);
          })
          
        }
      }
    },
    // 获取手机验证码。
    getVerifyCode(){
      if(this.validatemobile(this.data.registerParam.mobile)){
        this.setData({
          verifyCodeButtonDisabled: true
        });
        // 执行获取验证码流程
        app.sHttp.smsSend({mobile: this.data.registerParam.mobile,smsType:1,isNewMobile:0}).then(res =>{
          app.alert('验证码已发送至您的手机');
          this.codeCountDown();
        },err=>{
          app.error(err.msg);
        })
      }
    },
    // 验证码倒计时工具。
    codeCountDown(){
      var that = this;
      this.minuteInterval = setInterval(() => {
        var codeMinute = that.data.codeMinute;
        codeMinute--;
        that.setData({
          codeMinute: codeMinute
        });
        if(codeMinute == 0){
          clearInterval(that.minuteInterval);
          that.setData({
            codeMinute: 60,
            verifyCodeButtonDisabled: false
          })
        }
      }, 1000);
    },
    // 绑定注册参数输入
    bindRegisterParam(e){
      let registerParam = this.data.registerParam;
      registerParam[e.currentTarget.dataset.name] = e.detail.value;
      this.setData({
        registerParam : registerParam
      })
    },
    validatemobile(mobile) {
      if (mobile.length == 0) {
        app.alert('请输入手机号');
        return false;
      }
      if (mobile.length != 11) {
        app.alert('请输入正确的手机号');
        return false;
      }
      // var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/;
      // if (!myreg.test(mobile)) {
      //   app.alert('请输入正确的手机号');
      //   return false;
      // }
      return true;
    },
    useUserAgreement(){
      this.setData({
        userAgreement: !this.data.userAgreement
      })
    },
    // makePhoneCall(){
    //   wx.makePhoneCall({
    //       phoneNumber: app.globalData.customerService,
    //       success:function(){},
    //       fail:function(){}
    //   })
    // },
    openCustomerServiceChat(){
      app.openCustomerServiceChat();
    },
    doNothing(e){
    },
    jumpToUserAgreement(){
      this.hideModal();
      wx.navigateTo({
        url: '/pages/publicPage/userAgreement/userAgreement',
      })
    },
  },
  lifetimes: {
    detached: function() {
      if(this.data.aduitCheck){
        clearInterval(this.data.aduitCheck)
      }
    },
  },
})
